// middleware.ts   中间件
import { NextResponse, type NextRequest } from 'next/server'
import { getToken, TokenKey } from '@/utils/auth'
import { AppConfig } from '@/config/appConfig'

export async function middleware(request: NextRequest) {
    const { pathname, search } = request.nextUrl

    // ==================== API代理逻辑 ====================
    if (
        process.env.NEXT_PUBLIC_ENV === 'development' &&
        pathname.startsWith('/prod-api')
    ) {
        const proxyUrl = new URL(
            pathname.replace('/prod-api', ''),
            'http://localhost:8099'
        )

        // 保留原始查询参数
        request.nextUrl.searchParams.forEach((value, key) => {
            proxyUrl.searchParams.append(key, value)
        })

        return NextResponse.rewrite(proxyUrl)
    }
    // ==================== 身份验证逻辑 ====================
    const token = getToken() || request.cookies.get(TokenKey)?.value
    // ==================== 白名单配置 ====================
    const whitelist = [
        '/weiGao',
        '/task',
        '/note',
        '/heartAnimation',
        '/notification',
        '/socket',
        '/login',          // 登录页
        '/api/auth',       // 认证接口
        '/_next/static',   // 静态资源
        '/_next/image',    // 图片优化
        '/favicon.ico',    // 网站图标
        '/public/.*',       // 公开资源
        '/assets',       // 公开资源
    ]
    if (pathname.startsWith('/login') && token) {
        return NextResponse.redirect(new URL(AppConfig.BASE_PAGE_PARAMETER, request.url))
    }
    // 白名单放行
    if (whitelist.some(path => pathname.startsWith(path))) {
        return NextResponse.next()
    }
    // console.log("哈哈哈哈哈4")
    // 未登录访问非白名单 → 重定向登录页（不显示参数）
    if (!token) {
        // const loginUrl = new URL('/login', request.url)
        const loginUrl = new URL('/note', request.url)
        return NextResponse.redirect(loginUrl)
        // 将原始URL存入cookie（更安全）
        // const response = NextResponse.redirect(loginUrl)
        // response.cookies.set('redirect-url', pathname + search, {
        //     httpOnly: true,
        //     secure: process.env.NEXT_PUBLIC_ENV === 'production',
        //     maxAge: 60, // 1分钟有效
        //     path: '/login'
        // })

        // return response
    }
    // 已登录用户正常继续
    return NextResponse.next()
}

// 配置匹配路径（避免对静态资源执行中间件）
export const config = {
    matcher: [
        /*
         * 匹配所有请求路径，除了：
         * - _next/static (静态文件)
         * - _next/image (图片优化)
         * - favicon.ico (网站图标)
         */
        '/((?!_next/static|_next/image|favicon.ico).*)',
    ],
}

